package com.wwj.study.proxy.dynamics;

import com.wwj.study.proxy.Person;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * Created by lenovo on 2018/11/17.
 */
public class JDKJob implements InvocationHandler {

    //被代理对象
    private Person target;

    //传入被代理对象
    public Object getInstance(Person target){

        this.target=target;
        Class<?> clazz = target.getClass();

        //动态生成代理对象
        //代理对象实现被代理对象的所有接口

        Object object= Proxy.newProxyInstance(clazz.getClassLoader(),clazz.getInterfaces(),this);
        return object;
    }

    //invoke对象什么时候调用？
    //动态生成的代理对象$Proxy0，执行代理对象具体方法时，会调用接口InvocationHandler的方法invoke
    //$开头的类，都是临时类
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        System.out.println("开始物色");
        //执行被代理对象方法
        //传入被代理对象，参数
        method.invoke(this.target,args);
        System.out.println("找到了");
        return null;
    }
}
